/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.camachosanchez.reportes;

import com.camachosanchez.reportes.bean.HistorialDespinches;
import com.camachosanchez.reportes.bean.HistorialDespinchesDetalle;
import com.camachosanchez.util.Constantes;
import com.camachosanchez.util.GUIUtil;
import com.camachosanchez.util.ReportUtil;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.Element;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileOutputStream;
import java.util.List;

/**
 *
 * @author Rolando
 */
public class _ReporteDespinches {

    public static String generarReporte(HistorialDespinches despinches) {
        String rutaArchivo = "reportes/despinches" + "_" + GUIUtil.obtenerFechaDDMMYYYHHMMSS() + ".pdf";
        try {
            PdfPCell cell;
            Document document = new Document(PageSize.A4, 20, 20, 20, 20);
            PdfWriter.getInstance(document, new FileOutputStream(rutaArchivo));
            document.open();
            Paragraph paragraph = new Paragraph();
            paragraph.setAlignment(Element.ALIGN_CENTER);
            document.add(ReportUtil.obtenerCabeceraTabla("REPORTE DE GASTOS EN DESPINCHES"));
            document.add(new Paragraph("\n"));
            PdfPTable table = new PdfPTable(1);
            table.setWidthPercentage(100);
            Chunk chunk = new Chunk("Desde fecha: " + despinches.getFechaDesde(), Constantes.fuenteCuerpo);
            cell = new PdfPCell(new Phrase(chunk));
            cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
            cell.setBorder(0);
            table.addCell(cell);
            chunk = new Chunk("Hasta fecha: " + despinches.getFechaHasta(), Constantes.fuenteCuerpo);
            cell = new PdfPCell(new Phrase(chunk));
            cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
            cell.setBorder(0);
            table.addCell(cell);
            document.add(table);
            document.add(new Paragraph("\n"));
            List<HistorialDespinchesDetalle> detalles = despinches.getDetalles();
            for (HistorialDespinchesDetalle dt : detalles) {
                PdfPTable tablaDetalles = new PdfPTable(5);
                tablaDetalles.setWidthPercentage(100);
                tablaDetalles.addCell(ReportUtil.obtenerCeldaCabeceraTabla("CÓDIGO DE NEUMÁTICO", Constantes.fuenteEtiqueta, 1, Constantes.COLOR_CABECERA_TABLA));
                tablaDetalles.addCell(ReportUtil.obtenerCeldaTexto(dt.getCodigo(), Constantes.fuenteCuerpo, 4));
                tablaDetalles.addCell(ReportUtil.obtenerCeldaCabeceraTabla("FECHA", Constantes.fuenteEtiqueta, 1, Constantes.COLOR_CABECERA_TABLA));
                tablaDetalles.addCell(ReportUtil.obtenerCeldaTexto(dt.getFecha(), Constantes.fuenteCuerpo, 4));
                tablaDetalles.addCell(ReportUtil.obtenerCeldaCabeceraTabla("KILOMETRAJE", Constantes.fuenteEtiqueta, 1, Constantes.COLOR_CABECERA_TABLA));
                tablaDetalles.addCell(ReportUtil.obtenerCeldaTexto(dt.getKilometraje(), Constantes.fuenteCuerpo, 4));
                //Cabecera Tabla
                tablaDetalles.addCell(ReportUtil.obtenerCeldaCabeceraTabla("INSUMO", Constantes.fuenteTitulos, 1, Constantes.COLOR_CABECERA_TABLA));
                tablaDetalles.addCell(ReportUtil.obtenerCeldaCabeceraTabla("CÓDIGO", Constantes.fuenteTitulos, 1, Constantes.COLOR_CABECERA_TABLA));
                tablaDetalles.addCell(ReportUtil.obtenerCeldaCabeceraTabla("CANTIDAD", Constantes.fuenteTitulos, 1, Constantes.COLOR_CABECERA_TABLA));
                tablaDetalles.addCell(ReportUtil.obtenerCeldaNumerica("COSTO UNITARIO", Constantes.fuenteTitulos, 1, Constantes.COLOR_CABECERA_TABLA));
                tablaDetalles.addCell(ReportUtil.obtenerCeldaNumerica("COSTO PARCIAL", Constantes.fuenteTitulos, 1, Constantes.COLOR_CABECERA_TABLA));
                List<String[]> gastos = dt.getDetalles();
                for (String[] g : gastos) {
                    if (g.length == 5) {
                        tablaDetalles.addCell(ReportUtil.obtenerCeldaCabeceraTabla(g[0], Constantes.fuenteCuerpo, 1));
                        tablaDetalles.addCell(ReportUtil.obtenerCeldaCabeceraTabla(g[1], Constantes.fuenteCuerpo, 1));
                        tablaDetalles.addCell(ReportUtil.obtenerCeldaCabeceraTabla(g[2], Constantes.fuenteCuerpo, 1));
                        tablaDetalles.addCell(ReportUtil.obtenerCeldaNumerica(g[3], Constantes.fuenteCuerpo, 1));
                        tablaDetalles.addCell(ReportUtil.obtenerCeldaNumerica(g[4], Constantes.fuenteCuerpo, 1));
                    }
                }
                tablaDetalles.addCell(ReportUtil.obtenerCeldaSinBorde(" ", Constantes.fuenteEtiqueta, 3));
                tablaDetalles.addCell(ReportUtil.obtenerCeldaNumerica("SUBTOTAL", Constantes.fuenteEtiqueta, 1, Constantes.COLOR_CABECERA_TABLA));
                tablaDetalles.addCell(ReportUtil.obtenerCeldaNumerica(GUIUtil.formatearNumero(dt.getSubtotal()), Constantes.fuenteCuerpo, 1));
                tablaDetalles.addCell(ReportUtil.obtenerCeldaSinBorde(" ", Constantes.fuenteCuerpo, 5));
                document.add(tablaDetalles);
            }
            PdfPTable total = new PdfPTable(5);
            total.addCell(ReportUtil.obtenerCeldaSinBorde(" ", Constantes.fuenteEtiqueta, 3));
            total.addCell(ReportUtil.obtenerCeldaNumerica("TOTAL", Constantes.fuenteEtiqueta, 1, Constantes.COLOR_CABECERA_TABLA));
            total.addCell(ReportUtil.obtenerCeldaNumerica(GUIUtil.formatearNumero(despinches.getTotal()), Constantes.fuenteEtiqueta, 1));
            total.setHorizontalAlignment(Element.ALIGN_RIGHT);
            total.setWidthPercentage(100f);
            document.add(total);
//            table.setWidthPercentage(100);
            document.close();
        } catch (Exception e) {
            e.printStackTrace();
            rutaArchivo = null;
        } finally {
            return rutaArchivo;
        }
    }
}
